#include "mywidget.h"
#include <QLabel>
#include <QFont>
#include <QMovie>       //显示动图头文件
#include <QLCDNumber>
#include <QLineEdit>
#include <QDebug>
#include <QCompleter>
#include <QStringList>
#include <QTextEdit>
#include <QPushButton>
#include <QRadioButton>
#include <QButtonGroup>
#include <QCheckBox>
#include <QGroupBox>
#include <QComboBox>
#include <QSpinBox>
#include <QDoubleSpinBox>
#include <QTime>
#include <QDate>
#include <QDateTime>
#include <QTimeEdit>
#include <QDateTimeEdit>
#include <QTimer>










#include <QHBoxLayout>
#include <QVBoxLayout>

//对象中静态成员定义:
int mywidget::start_time = 0;

mywidget::mywidget(QWidget *parent) : QWidget(parent)
{
    this->setWindowIcon(QIcon("a.ico"));    //设置widget窗口的图标；



    QHBoxLayout* mainLayout = new QHBoxLayout;
    QHBoxLayout* mainLayout1 = new QHBoxLayout;
    QHBoxLayout* mainLayout3 = new QHBoxLayout;
    QHBoxLayout* mainLayout4 = new QHBoxLayout;
    QHBoxLayout* mainLayout5 = new QHBoxLayout;
    QHBoxLayout* mainLayout6 = new QHBoxLayout;
    QVBoxLayout* mainLayout7 = new QVBoxLayout;
    QVBoxLayout* mainLayout8 = new QVBoxLayout;
    QVBoxLayout* mainLayout2 = new QVBoxLayout(this);




    //No.1 Label
    //显示文本:
    /*
    QLabel* label = new QLabel("这是一个标签的文本信息");
    //可以通过font来设置label中的文本字体：
            //方式1：
    //QFont font("楷体",16);
            //方式2：
    QFont font;
    font.setFamily("楷体");           //设置字体
    font.setPointSize(16);              //设置字体大小
    font.setItalic(true);                   //设置倾斜；
    label->setFont(font);
    */

    //显示图片：
    /*
    QLabel* label = new QLabel;
    //label->setPixmap(QPixmap("D:\\qt_code\\widget_master\\ruiwen.png"));    //qt编译器不建议这样使用文件路径，一般推荐使用下面的：
    label->setPixmap(QPixmap("D:/qt_code/widget_master/ruiwen.png"));
    */

    //显示gif动图：
    QLabel* label = new QLabel;
    QMovie* move = new QMovie("D:/qt_code/widget_master/a.gif");
     label->setMovie(move);
     move->start();







     //No.2 LCDNumber
    lcd = new QLCDNumber;
    lcd->setSegmentStyle(QLCDNumber::Flat);
    lcd->setDigitCount(10);             //设置长度
    lcd->display(200);                  //显示200







    //NO.3 LineEdit
    lineEdit = new QLineEdit;
    lineEdit->setText("liqiongyi");
    lineEdit->text();       //获取LineEdit文本内容
    //lineEdit->setEchoMode(QLineEdit::Password);     //设置模式为密码模式
    //lineEdit->setAlignment(Qt::AlignRight);                      //设置文本对齐方式，左对齐，右对齐
    //lineEdit->setReadOnly(true);                //设置只读，不能写入
    //lineEdit->setEnabled(false);                     //设置禁用   连 copy都不能copy
    //bool ok = lineEdit->isModified();                   //是否被修改
    lineEdit->selectAll();                                      //选中lineEdit中的所有文本

    //输入提示弹出：
    QCompleter* completer = new QCompleter(QStringList()<<"China"<<"Usa"<<"Uk"<<"Rush b ");
    completer->setCaseSensitivity(Qt::CaseSensitive);               //忽略大小写
    lineEdit->setCompleter(completer);

    connect(lineEdit,SIGNAL(textChanged(QString)),this,SLOT(textout()));    //被修改触发槽函数
    //connect(lineEdit,SIGNAL(selectionChanged()),this,SLOT(textout()));    //被选中触发槽函数









    //No.4 TextEdit         多行文本
     textEdit = new QTextEdit("当前该TextEdit文本无内容，点击show time 获取时间显示在该文本控件上！");
            //也支持HTML：
    //不搞了











    //NO.5 PushButton
    btn1 = new QPushButton(QIcon("a.ico"),"open");     //可以添加图标
    btn2 = new QPushButton(QIcon("a.ico"),"close");
    btn3 = new QPushButton(QIcon("a.ico"),"show time");
    btn2->setDefault(true);     //设置默认按钮
    connect(btn2,SIGNAL(clicked(bool)),this,SLOT(close()));










     //No.6 RadioButton 单选
     QRadioButton* man = new QRadioButton("男");
     QRadioButton* woman = new QRadioButton("女");
     QRadioButton* what = new QRadioButton("人妖");
     what->setText("baby");         //重新 设置文本
     man->setChecked(true);     //设置为默认单选
     man->setIcon(QIcon("a.ico"));      //还可以添加图标

     //单选按钮是需要设置组的，如果你想要添加的单选并不是一组，那就一定需要这样操作，不然设置的全是一组的，选择的时候会有问题；
     //添加组成员：
    QButtonGroup* sexgroup = new QButtonGroup;
    sexgroup->addButton(man);
    sexgroup->addButton(woman);
    sexgroup->addButton(what);
    //这样 如果后面还有单选的话，就会和这个组单独开；

    //给单选框组添加条框，问卷调查那样的：
    QGroupBox* sexgp = new QGroupBox("性别>");
    sexgp->setLayout(mainLayout3);      //把该单选组的横向布局的地址给到；
    //这里把该单选组的横向布局的地址给到之后，水平布局的添加里就要把addLayout删掉，改为addWidget(sexgp);    变成添加widget了该；就行了；

    qDebug()<<man->text();                     // 获取文本
    qDebug()<<man->isChecked();


    //再添加一组单选：
    QRadioButton* china = new QRadioButton("China");
    QRadioButton* fuckyou = new QRadioButton("sb");

    //设置组成员：
   QButtonGroup* wheregroup = new QButtonGroup;
   wheregroup->addButton(china);
   wheregroup->addButton(fuckyou);
   china->setChecked(true);         //设置为默认单选

   //给单选框组添加条框，问卷调查那样的：
   QGroupBox* guojiagp = new QGroupBox("国家>");
   guojiagp->setLayout(mainLayout4);      //把该单选组的横向布局的地址给到；
   //这里把该单选组的横向布局的地址给到之后，水平布局的添加里就要把addLayout删掉，改为addWidget(guojiagp);    变成添加widget了该；就行了；











   //CheckBox       复选
   QCheckBox* du = new QCheckBox("赌");
   QCheckBox* huang = new QCheckBox("嫖");
   QCheckBox* dur = new QCheckBox("毒");
   QCheckBox* smock = new QCheckBox("抽");
   huang->setIcon(QIcon("a.ico"));      //也可以添加图标

   //这个也要分组啊；
   QButtonGroup* xingqu = new QButtonGroup;        //注意 默认组具有互斥性，也就是说默认情况下的多选组也是单选的
   xingqu->setExclusive(false);             //设置不具有互斥性
   xingqu->addButton(du);
   xingqu->addButton(huang);
   xingqu->addButton(dur);
   xingqu->addButton(smock);

   //给复选框组添加条框，问卷调查那样的：
   QGroupBox* xingqugp = new QGroupBox("兴趣爱好>");
   xingqugp->setLayout(mainLayout5);      //把该复选框的横向布局的地址给到；
   //这里把该复选框的横向布局的地址给到之后，水平布局的添加里就要把addLayout删掉，改为addWidget(xingqugp);    变成添加widget了该；就行了；

   huang->setChecked(true);             //设置为默认多选项
   qDebug()<<huang->text();                     // 获取文本
   qDebug()<<huang->isChecked();        //查看 是否被选中











   //CombBox        下拉框
    comb = new QComboBox;
    comb->setEditable(true);            //设置可以修改
    comb->addItem("汉族");
    comb->addItem("蒙古族");
    comb->addItem("回族");
    comb->addItem("苗族");

    //也搞个输入提示：
    QCompleter* completer2 = new QCompleter(comb->model());     //不能用QStringList()来表达提示内容了，comb里存着下拉框的内容，就直接用comb->mode()来，以后下拉框就这样弄
    comb->setCompleter(completer2);

    //添加组：
    QGroupBox* minzugp = new QGroupBox("民族啊>");
    minzugp->setLayout(mainLayout6);

    //添加个按钮，来输出选中内容：
    QPushButton* nation = new QPushButton("okok");
    connect(nation,SIGNAL(clicked(bool)),this,SLOT(combtextout()));










    //SpinBox   微调控件
     spinbox = new QSpinBox;
    spinbox->setRange(0,100);       //设置范围
    spinbox->setSingleStep(5);      //设置步长
    spinbox->setSuffix("    $");            //设置后缀
    spinbox->setPrefix("手里现在有>  ");        //设置前缀
    spinbox->setMinimum(0);                 //设置最小值
    spinbox->setMaximum(100000);                //设置最大值
    qDebug()<<spinbox->value();                         //获取值
    connect(spinbox,SIGNAL(textChanged(QString)),this,SLOT(spinboxtext()));    //被修改触发槽函数










    //DoubleSpinBox
    QDoubleSpinBox* dspinbox = new QDoubleSpinBox;
    dspinbox->setRange(10.0,200.0);
    //其他操作和SPinBox是一样的

    //给SpinBox  和 DoubleSpinBox 搞成一组显示;
    QGroupBox* maneigp = new QGroupBox("马内>");
    maneigp->setLayout(mainLayout7);











    //Time  和 Date
    connect(btn3,SIGNAL(clicked(bool)),this,SLOT(showtime()));
    //开启定时器:
    time_id1 = startTimer(1000);       //ms = 1s；   每1000ms触发一次定时器













    //TimerEdit
    QTimeEdit* timeEdit = new QTimeEdit(QTime::currentTime());
    timeEdit->setTime(QTime(12,59,59));         //设置时间
    qDebug()<<timeEdit->time();
    QGroupBox* timegp = new QGroupBox("时间>");
    timegp->setLayout(mainLayout8);











    //DateEdit:
    QDateEdit* dateEdit = new QDateEdit(QDate::currentDate());










    //DateTimeEdit
    QDateTimeEdit*  dateTimeEdit = new QDateTimeEdit(QDateTime::currentDateTime());







    //布局：
    mainLayout->addWidget(label);

    mainLayout1->addWidget(btn1);
    mainLayout1->addWidget(btn2);
    mainLayout1->addWidget(btn3);

    mainLayout3->addWidget(man);
    mainLayout3->addWidget(woman);
    mainLayout3->addWidget(what);

    mainLayout4->addWidget(china);
    mainLayout4->addWidget(fuckyou);

    mainLayout5->addWidget(du);
    mainLayout5->addWidget(huang);
    mainLayout5->addWidget(dur);
    mainLayout5->addWidget(smock);

    mainLayout6->addWidget(comb);
    mainLayout6->addWidget(nation);

    mainLayout7->addWidget(spinbox);
    mainLayout7->addWidget(dspinbox);

    mainLayout8->addWidget(timeEdit);
    mainLayout8->addWidget(dateEdit);
    mainLayout8->addWidget(dateTimeEdit);

    mainLayout2->addLayout(mainLayout);
    mainLayout2->addWidget(lcd);
    mainLayout2->addWidget(lineEdit);
    mainLayout2->addWidget(textEdit);
    mainLayout2->addLayout(mainLayout1);
    //mainLayout2->addLayout(mainLayout3);
    mainLayout2->addWidget(sexgp);
    //mainLayout2->addLayout(mainLayout4);
    mainLayout2->addWidget(guojiagp);
    //mainLayout2->addLayout(mainLayout5);
    mainLayout2->addWidget(xingqugp);
    //mainLayout2->addLayout(mainLayout6);
    mainLayout2->addWidget(minzugp);
    //mainLayout2->addLayout(mainLayout7);
    mainLayout2->addWidget(maneigp);
    mainLayout2->addWidget(timegp);
}

void mywidget::textout()
{
    qDebug()<<lineEdit->text();                       //lineEdit改变就输出打印
    //qDebug()<<lineEdit->selectedText();           //选中lineEdit中的哪个就输出打印那部分
}

void mywidget::combtextout()
{
    qDebug()<<comb->currentText();      //输出 下拉框选中的内容；
    qDebug()<<comb->currentIndex();     //输出索引
}

void mywidget::spinboxtext()
{
    qDebug()<<"手里现在有>   "<<spinbox->value();
}

void mywidget::showtime()
{
    start_time = 1;
    //Time:
    QTime time = QTime::currentTime();
//    qDebug()<<time;
//    qDebug()<<time.hour();                  //时
//    qDebug()<<time.minute();            //分
//    qDebug()<<time.second();            //秒
//    qDebug()<<time.msec();                  //毫秒

    //把时间转化为字符串：
    QString str = "     当前时间为：>  ";
     str += time.toString("HH:mm:ss");  //定义字符串格式
    //qDebug()<<str;

    QString str2 = time.toString("HH:mm:ss");  //定义字符串格式
    lcd->display(str2);

    //Date:
    QDate date = QDate::currentDate();
//    qDebug()<<date;
//    qDebug()<<date.year();
//    qDebug()<<date.month();
//    qDebug()<<date.day();

    //把日期转化为字符串：
    QString str3 = "当前日期为：>  ";
    str3 +=  date.toString("yyyy-MM-dd");
    textEdit->setText(str3 + str);

}

void mywidget::timerEvent(QTimerEvent *ev)
{
    if( start_time == 1&& ev->timerId() == time_id1)
    {
        //Date:
        QDate date = QDate::currentDate();
        //把日期转化为字符串：
        QString str3 = "当前日期为：>  ";
        str3 +=  date.toString("yyyy-MM-dd");
        //Time:
        QTime time = QTime::currentTime();
        //把时间转化为字符串：
        QString str = "     当前时间为：>  ";
         str += time.toString("HH:mm:ss");  //定义字符串格式
        //qDebug()<<str;
        textEdit->setText(str3 + str);

    }
}
